package net.pws.common.persistence.jdbc;

import java.util.List;

import javax.sql.DataSource;

import net.pws.common.persistence.IPage;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;


public abstract class JdbcTemplateExtension extends JdbcTemplate {
    
    public JdbcTemplateExtension() {
        super();
    }
    
    public JdbcTemplateExtension(DataSource dataSource, boolean lazyInit) {
        super(dataSource, lazyInit);
    }
    
    public JdbcTemplateExtension(DataSource dataSource) {
        super(dataSource);
    }
    
    /**
     * 分页查询，需要使用者提供查询的sql
     * 
     * @param sql4Query
     *            用于查询
     * @param parameters
     *            参数
     * @param startPageNo
     *            起始页
     * @param maxResultsInPage
     *            每页最大记录数
     * @return
     */
    public abstract IPage queryByPage(final String sql4Query,
                                      final Object[] parameters,
                                      final int startPageNo,
                                      final int maxResultsInPage,
                                      final RowMapper rowMapper);
    
    /**
     * 分页查询，需要使用者提供查询的sql
     * 
     * @param sql4Query
     *            用于查询
     * @param parameters
     *            参数
     * @param startPageNo
     *            起始页
     * @param maxResultsInPage
     *            每页最大记录数
     * @return
     */
    public abstract IPage queryByPage(final String sql4Query,
                                      final List parameters,
                                      final int startPageNo,
                                      final int maxResultsInPage,
                                      final RowMapper rowMapper);
    
    /**
     * 分页查询，需要使用者提供计数的sql和用于实际查询的sql
     * 
     * @param sql4Count
     *            用于计数
     * @param sql4Query
     *            用于查询
     * @param parameters
     *            参数
     * @param startPageNo
     *            起始页
     * @param maxResultsInPage
     *            每页最大记录数
     * @return
     */
    public abstract IPage queryByPage(final String sql4Count,
                                      final String sql4Query,
                                      final Object[] parameters,
                                      final int startPageNo,
                                      final int maxResultsInPage,
                                      final RowMapper rowMapper);
}
